import VueRouter from "vue-router"
import Vue from "vue"
import routes from "./routes"

const _load = require("./auto_import")
import {T} from "@/utils/common"

Vue.use(VueRouter)
// 创建 router 实例，然后传 `routes` 配置
// 你还可以传别的配置参数, 不过先这么简单着吧。
const router = new VueRouter({
    routes // (缩写) 相当于 routes: routes
})


export default router
export const route = routes

/**
 * 递归生成菜单和路由数据
 * @param routers
 * @param data
 */
export function generateRouters(routers, data) {
    /**
     * data 基本数据结构
     * {
     *   name:"路径名称",
     *   path:"请求路径",
     *   componentPath:"组件路径page下的路径例如：/main(.vue省略不写)"
     *   redirect:"/data.path/children[0].path"（在有children的情况下）
     *   meta:{
     *     icon:"el-icon 图标",
     *     alive:"是否keep-alive",
     *     auth:"是否有权限访问该路径"
     *   },
     *   children:[
     *     ...data 数据结果同data
     *   ]
     * }
     */
    // 如果data为空 说明么有数据了直接返回;T()是类型助手函数在@/utils/common.js下
    if (!T(data, "object")) {
        return
    }
    // 根据data创建一个新的数据item
    let item = Object.assign({}, data)
    // 对item的component进行赋值
    item.component = _load(item.componentPath)
    // 如果item有子元素就继续调用当前方法并设置当前item的redirect路径
    if (T(item.children, 'array') && item.children.length > 0) {
        item.children.forEach(o => {
            // 由于数组传递是引用传递，这里每一次的递归都能被添加
            generateRouters(routers, o)
        })
    } else {
        if (!item) return
        // 由于数组传递是引用传递，这里每一次的递归都能被添加
        routers.push(item)
    }
}
